home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / machack / Hacks96 / RoasterJavaWAHTTPCGI.sit / Roaster-Java-WA-HTTP-CGI hack / JavaWebStuff / Messages.c < prev    next >
C/C++ Source or Header  |  1996-06-22  |  2KB  |  132 lines

  1. #include <string.h>
  2.  
  3. #include <Gestalt.h>
  4. #include <GestaltEqu.h>
  5. #include "CoolGestalt.h"
  6. #include <OSUtils.h>
  7.  
  8. #include "Messages.h"
  9.  
  10. typedef struct myQueue
  11. {
  12.     QElemPtr    qLink;
  13.     short        qType;
  14.     Ptr            qData;
  15. } myQueue, *myQueuePtr;
  16.  
  17. OSErr MsgToQ(long qName, char *message, long len)
  18. {
  19.     char *elt;
  20.     long g = 0;
  21.     OSErr status;
  22.     myQueuePtr header;
  23.     
  24.     status = Gestalt(qName, &g);
  25.     if (status == noErr && g != 0)
  26.     {
  27.         elt = NewPtrSysClear(len);
  28.         if (elt)
  29.         {
  30.             header = (myQueuePtr) NewPtrSysClear(sizeof(myQueue));
  31.             if (header)
  32.             {
  33.                 memcpy(elt, message, len);
  34.                 
  35.                 header->qData = elt;
  36.                 
  37.                 Enqueue((QElemPtr) header, (QHdrPtr) g);
  38.                 status = 0;
  39.             }
  40.             else
  41.             {
  42.                 status = -3;
  43.                 DisposePtr(elt);
  44.             }
  45.         }
  46.         else
  47.             status = -2;
  48.     }
  49.     else
  50.         status = -1;
  51.     
  52.     return status;
  53. }
  54.  
  55.  
  56. char *MsgFromQ(long qName)
  57. {
  58.     long g = 0;
  59.     OSErr status;
  60.     Ptr result = NULL;
  61.     QHdrPtr q;
  62.     myQueuePtr header;
  63.     char *elt = NULL;
  64.     
  65.     
  66.     status = Gestalt(qName, &g);
  67.     
  68.     if (status == noErr && g != 0)
  69.     {
  70.         q = (QHdrPtr) g;
  71.         header = (myQueuePtr) q->qHead;
  72.         if (header)
  73.         {
  74.             status = Dequeue((QElemPtr) header, q);
  75.             
  76.             elt = header->qData;
  77.             DisposePtr((Ptr) header);
  78.         }
  79.         result = elt;
  80.     }
  81.     
  82.     return result;
  83. }
  84.  
  85. void FlushQ(long qName)
  86. {
  87.     char *elt;
  88.     
  89.     while ((elt = MsgFromQ(qName)) != NULL)
  90.     {
  91.         DisposePtr(elt);
  92.     }
  93. }
  94.  
  95. OSErr SetupQueues()
  96. {
  97.     long g;
  98.     
  99.     OSErr status, result = noErr;
  100.     
  101.     Ptr qHead;
  102.     
  103.     status = Gestalt('javC', &g);
  104.     
  105.     if (status != noErr || g == 0)
  106.     {    
  107.         qHead = NewPtrSysClear(sizeof(QHdr));
  108.         
  109.         if (!qHead)
  110.             return -1;
  111.         
  112.         status = NewGestaltValue('javC', (long) qHead);
  113.         if (status != noErr)
  114.             result = status;
  115.     }
  116.     
  117.     status = Gestalt('javS', &g);
  118.  
  119.     if (status != noErr || g == 0)
  120.     {    
  121.         qHead = NewPtrSysClear(sizeof(QHdr));
  122.         
  123.         if (!qHead)
  124.             return -2;
  125.         
  126.         status = NewGestaltValue('javS', (long) qHead);
  127.         if (status != noErr)
  128.             result = status;
  129.     }
  130.     
  131.     return result;
  132. }